import { ReactNode } from 'react';
import type { TableProps } from 'antd/lib/table';
import type { FormItemProps } from 'antd/lib/form';

import RbProTableStore from './stores';

/** RbProTable 查询配置 */
export type RbProTableQueryConfig = {
  /** 查询条 */
  queryFromItems?: FormItemProps[];

  /** 查询表单初始化值 */
  queryInitialValues?: { [key: string]: any };

  /**
   * 查询条件处理
   * @example 用于处理请求前的时间参数
   */
  queryFormat?: any;

  /** 查询url */
  queryUrl?: string;

  /**
   * 查询请求方式
   * @default 'GET'
   */
  queryMethod?: string;
};

/** RbProTable 新增配置 */
export type RbProTableAddConfig = {
  /**
   * 新增弹窗标题
   * @default '新增'
   */
  addModalTitle?: ReactNode;

  /** 新增表单 */
  addFormItems?: FormItemProps[];

  /** 新增表单初始化值 */
  addInitialValues?: { [key: string]: any };

  /** 新增保存url */
  addUrl?: string;

  /**
   * 新增保存请求方式
   * @default 'POST'
   */
  addMethod?: string;
};

/** RbProTable 修改配置 */
export type RbProTableUpdateConfig = {
  /**
   * 编辑弹窗标题
   * @default '编辑'
   */
  updateModalTitle?: ReactNode;

  /** 编辑表单 */
  updateFormItems?: FormItemProps[];

  /** 编辑保存url */
  updateUrl?: string;

  /**
   * 编辑保存请求方式
   * @default 'PUT'
   */
  updateMethod?: string;
};

/** RbProTable 删除配置 */
export type RbProTableDeleteConfig = {
  /**
   * 删除前提示
   * @default '是否确定删除?'
   */
  deleteTip?: ReactNode;

  /** 删除url */
  deleteUrl?: string;

  /**
   * 删除请求方式
   * @default 'DELETE'
   */
  deleteMethod?: string;
};

/** RbProTable 属性 继承了antd表格中的所有属性 */
export type RbProTableProps = TableProps<any> & {
  /**
   * 表格作用域
   * @default '不传入会自动创建'
   * @example '传入属性则可在外部使用内置方法和属性'
   */
  store?: RbProTableStore;

  /** 表格标题 */
  headerTitle?: ReactNode;

  /** 设置表格载入状态 */
  loading?: boolean;

  /** 刷新dom */
  refreshRandom?: number;

  /**
   * 表格勾选方式
   * @example 无勾选 | 多选 | 单选
   * @default 无勾选
   */
  selectionType?: boolean | 'checkbox' | 'radio';

  /**
   * 表格按钮操作栏
   * @example 无操作栏 | 内置操作栏 | 自定义操作栏
   * @default '显示列配置操作栏'
   */
  toolBarRender?: boolean | (() => (string | ReactNode)[]) | ReactNode[];

  /**
   * 表格是否分页
   * @default true
   */
  paging?: boolean;

  /**
   * 打开弹窗前查询
   * @example '用于打开抽取前请求抽屉中使用到的字典数据等'
   */
  beforeOpenModalQuery?: () => any;

  /** 通用操作Url */
  actionUrl?: string;

  /** 查询配置 */
  queryConfig?: RbProTableQueryConfig;

  /** 新增配置 */
  addConfig?: RbProTableAddConfig;

  /** 修改配置 */
  updateConfig?: RbProTableUpdateConfig;

  /**
   * 通用修改表单
   * @example 新增 | 编辑
   */
  editFormItems?: FormItemProps[];

  /** 删除配置 */
  deleteConfig?: RbProTableDeleteConfig;
};
